
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently,
// but are changed infrequently

#pragma once

#ifndef _SECURE_ATL
#define _SECURE_ATL 1
#endif

#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN            // Exclude rarely-used stuff from Windows headers
#endif

#include "targetver.h"

#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // some CString constructors will be explicit

// turns off MFC's hiding of some common and often safely ignored warning messages
#define _AFX_ALL_WARNINGS

#include <afxwin.h>         // MFC core and standard components
#include <afxext.h>         // MFC extensions


#include <afxdisp.h>        // MFC Automation classes



#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h>           // MFC support for Internet Explorer 4 Common Controls
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>             // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT

#include <afxcontrolbars.h>     // MFC support for ribbons and control bars
#include <afxdlgs.h>

#define DELETE_EXCEPTION(e) do { if(e) { e->Delete(); } } while (0)

#include <glib.h>
#include "LogMgr.h"
#include <afxdhtml.h>

#include <lc_types.h>
#include <lc_notification.h>
#include <lc_transcode_preset.h>
#include <lc_security_policy.h>
#include <lc_recording_preset.h>
#include <lc_session.h>

struct ILock {
    virtual void Lock() = 0;
    virtual void Unlock() = 0;
};

class CScopedLock {
private:
    ILock* m_pLock;

public:
    CScopedLock(ILock* plock)
        : m_pLock(plock) {
        m_pLock->Lock();
    }
    ~CScopedLock() {
        m_pLock->Unlock();
    }
};

class CMutexLock: public ILock {
private:
    GMutex m_lock;
public:
    CMutexLock() {
        g_mutex_init(&m_lock);
    }
    ~CMutexLock() {
        g_mutex_clear(&m_lock);
    }
public:
    void Lock() {
        g_mutex_lock(&m_lock);
    }

    void Unlock() {
        g_mutex_unlock(&m_lock);
    }
};

#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif


